﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using KCMS.DataAcsess.Entitys;

namespace KCMS.DataAcsess.Engine
{
    public class DataManager <T> where T : Entity
    {
        protected DataClassesDataContext db = new DataBaseConnect().DataBase;


        public Guid save(T item)
        {
            db.GetTable(item.GetType()).InsertOnSubmit(item);
            db.SubmitChanges();
            return item.Id;
        }

        /// <summary>
        /// Метод, удаляющий данные типа T из таблицы сущности типа T базы данных
        /// </summary>
        /// <param name="item">Объект типа T, который удаляется из таблицы</param>
        public void delete(Guid id)
        {
            var entity = (from t in db.GetTable<T>()
                          where t.Id.Equals(id)
                          select t).Single();
            db.GetTable<T>().DeleteOnSubmit(entity);
            db.SubmitChanges();
        }
        /// <summary>
        /// Метод, извлекающий данные типа T из таблицы сущности типа T базы данных по указанному ID 
        /// </summary>
        /// <param name="id">Объект типа Guid, по которому ищется объект типа T</param>
        /// <returns>Объект типа T</returns>
        public T getById(Guid id)
        {
            return (from t in db.GetTable<T>()
                    where t.Id.Equals(id)
                    select t).Single();
        }

        /// <summary>
        /// Метод, возвращающий данные типа T в списке IEnumerable<T>
        /// </summary>
        /// <returns>IEnumerable<T></returns>
        public IEnumerable<T> getAll()
        {
            return (from t in db.GetTable<T>()
                    select t).ToList();
        }

    }
}
